#pragma once

#include <boost/shared_ptr.hpp>

namespace winboost {
   namespace resources {

      // Accelerator
/*      typedef boost::shared_ptr<HACCEL__> accel_handle_t;
      typedef boost::weak_ptr<HACCEL__>   accel_weak_handle_t;
      struct deleter_accel
      {
         void operator()(HACCEL h)   {::DestroyAcceleratorTable(h);}
      };
*/
/*
      // Window handle
      typedef boost::shared_ptr<HWND__>   window_handle_t;
      typedef boost::weak_ptr<HWND__>     window_weak_handle_t;

      struct deleter_window
      {
         void operator()(HWND h)  { ::DestroyWindow(h); }
      };
*/
      // Menu
/*      typedef boost::shared_ptr<HMENU__>   menu_handle_t;
      typedef boost::weak_ptr<HMENU__>     menu_weak_handle_t;
      struct deleter_menu
      {
         void operator()(HMENU h)  { ::DestroyMenu(h); }
      };
*/
      // Icon
/*      typedef boost::shared_ptr<HICON__>   icon_handle_t;
      typedef boost::weak_ptr<HICON__>     icon_weak_handle_t;
      struct deleter_icon
      {
         void operator()(HICON h)  { ::DestroyIcon(h); }
      };
*/
      // Cursor. 
      // Cursor is a typedef of HICON if you wonder why HICON__ parameter
/*      typedef boost::shared_ptr<HICON__>   cursor_handle_t;
      typedef boost::weak_ptr<HICON__>     cursor_weak_handle_t;
      struct deleter_cursor
      {
         void operator()(HCURSOR h)  { ::DestroyCursor(h); }
      };
*/
      // Brush
      typedef boost::shared_ptr<HBRUSH__> brush_handle_t;
      typedef boost::weak_ptr<HBRUSH__> brush_weak_handle_t;

      template<typename _Ty>
      struct deleter_gdi_object
      {
         void operator()(_Ty h)  { ::DeleteObject(h); }
      };
   }
}